package models.dao;

import java.sql.*;
import java.util.LinkedList;
import java.util.List;

import models.entity.Venta;
import utilidades.DataBaseInstance;

public class VentaDao {
    
    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    
     public List<Venta> findAll() {
        List<Venta> listaVenta = new LinkedList<Venta>();
        ResultSet result = null;

        try {

            String query = "SELECT * FROM venta";
            Statement stmt = getConnection().createStatement();
            result = stmt.executeQuery(query);

            while (result.next()) {
                Venta venta = new Venta();
                venta.setVenta_codigo(result.getInt("venta_Codigo"));
                venta.setVenta_fecha(result.getString("venta_Fecha"));
                venta.setUsuario_codigo(result.getInt("usuario_Codigo"));
                venta.setVenta_totalpagar(result.getInt("venta_TotalPagar"));
                listaVenta.add(venta);
            }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.out.println(se.toString());
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaVenta;
    }

    public List<Venta> VentasPorUsuario(int usuarioID){
    List<Venta> listaVenta = new LinkedList<Venta>();
    ResultSet result = null;

        try {

            String query = "SELECT * FROM venta WHERE usuario_Codigo = ?";
            PreparedStatement stmt = getConnection().prepareStatement(query);
            stmt.setInt(1, usuarioID);
            result = stmt.executeQuery();
            
            if (!result.next()) {
                throw new SQLException();
            }

     while (result.next()) {
            Venta venta = new Venta();
            venta.setVenta_codigo(result.getInt("venta_Codigo"));
            venta.setVenta_fecha(result.getString("venta_Fecha"));
            venta.setUsuario_codigo(result.getInt("usuario_Codigo"));
            venta.setVenta_totalpagar(result.getDouble("venta_TotalPagar")); 
            listaVenta.add(venta);
            
     }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaVenta;
    }
    
    public Venta UltimaVenta (){
    Venta venta = null;
    ResultSet result = null;

        try {

            String query = "Select venta_codigo, venta_fecha, usuario_codigo, venta_totalpagar from venta Order By venta_codigo DESC";
            PreparedStatement stmt = getConnection().prepareStatement(query);
            
            result = stmt.executeQuery();
            result.setFetchSize(1);
            
            
            if (!result.next()) {
                throw new SQLException();
            }
            
            venta = new Venta();
            venta.setVenta_codigo(result.getInt("venta_Codigo"));
            venta.setVenta_fecha(result.getString("venta_Fecha"));
            venta.setUsuario_codigo(result.getInt("usuario_Codigo"));
            venta.setVenta_totalpagar(result.getDouble("venta_TotalPagar"));

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return venta;
    }
    
     public void save(Venta venta, int cod) {
     int id = cod;
        PreparedStatement saveVenta;
        try {

            if (venta.getVenta_codigo()== 0) {
                saveVenta = getConnection().prepareStatement(
                        "INSERT INTO venta (venta_Fecha, usuario_Codigo, venta_TotalPagar) "
                        + "VALUES (?, ?, ?)");
                saveVenta.setString(1, venta.getVenta_fecha());
                saveVenta.setInt(2, id);
                saveVenta.setDouble(3, venta.getVenta_totalpagar());
                System.out.println("INSERT INTO ....");
            } else {
                saveVenta = getConnection().prepareStatement(
                        "UPDATE venta SET venta_Fecha = ?, usuario_Codigo = ?, venta_TotalPagar = ?WHERE  venta_Codigo = ?");
                saveVenta.setString(1, venta.getVenta_fecha());
                saveVenta.setInt(2, id);
                saveVenta.setInt(3, (int)venta.getVenta_totalpagar());
                saveVenta.setInt(4, venta.getVenta_codigo());
            }

            saveVenta.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }
     
    public void delete(Venta venta, int cod) {
        PreparedStatement saveProduct;
        try {

            if (venta.getVenta_codigo()> 0) {
                saveProduct = getConnection().prepareStatement(
                        "DELETE FROM venta WHERE venta_Codigo = ?");

                saveProduct.setInt(1, venta.getVenta_codigo());
                saveProduct.executeUpdate();
            }


            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    } 
     
    
    protected void closeConnection() {
        DataBaseInstance.closeConnection();
    }
    
}
